package com.nicolas.pattern.builder;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 * 为了提高系统的灵活性和可扩展性，我们将具体建造者类的类名存储在配置文件中，
 * 并通过工具类XMLUtil来读取配置文件并反射生成对象
 * @author nicolas  2017年2月11日 -- 下午8:01:41
 */
public class XMLUtil {
//该方法用于从XML配置文件中提取具体类类名，并返回一个实例对象
   public  static Object getBean()
   {
      try
      {
             //创建文档对象
		 DocumentBuilderFactory  dFactory = DocumentBuilderFactory.newInstance();
		 DocumentBuilder  builder = dFactory.newDocumentBuilder();
		 Document  doc;                                                
		 doc  = builder.parse(new File("src/com/nicolas/pattern/builder/config.xml"));
 
         //获取包含类名的文本节点
		 NodeList  nl = doc.getElementsByTagName("className");
	    Node  classNode=nl.item(0).getFirstChild();
	    String  cName=classNode.getNodeValue();
   
	    //通过类名生成实例对象并将其返回
    	 Class c=Class.forName(cName);
         Object obj=c.newInstance();
         return obj;
     }  
     catch(Exception e)
     {
          e.printStackTrace();
          return null;
      }
   }
}
